<?php

namespace app\socket\controller;

use GatewayWorker\Lib\Gateway;
use Workerman\Lib\Timer;

//declare(ticks=1);

date_default_timezone_set('PRC');

/**
 * 主逻辑
 * 主要是处理 onConnect onMessage onClose 三个方法
 * onConnect 和 onClose 如果不需要可以不用实现并删除
 */
class Events
{
    /**
     * 当客户端连接时触发
     * 如果业务不需此回调可以删除onConnect
     *
     * @param int $client_id 连接id
     */
    public static function onConnect($client_id)
    {
        //print_r($_SERVER);
        echo $client_id .'上线了！';
        Gateway::sendToAll($client_id . '来啦来啦！');
    }

    /**
     * 当客户端发来消息时触发 AA支付 <85·8·*8·87906@qq.com>
     *
     * @param int $client_id 连接id
     * @param mixed $message 具体消息
     */
    public static function onMessage($client_id, $messages)
    {
        Gateway::sendToAll($messages);
        echo $messages . "\n";
        $message = json_decode($messages, true);

        if (empty($message)) {
            return;
        }

        if (isset($message['type'])) {
            switch ($message['type']) {
                case 'login':
                    self::callback($client_id);
                    break;
                default:
                    # code...
                    break;
            }
        }
    }

    /**
     * 守护进程时启动  常驻内存
     * AA支付 <858887906@qq.com>
     *
     * @param $businessWorker
     */
    public static function onWorkerStart($businessWorker)
    {
        // 只在id编号为0的进程上设置定时器，其它1、2、3号进程不设置定时器
        if ($businessWorker->id === 0) {

//            Timer::add(5, function () {
//                echo date('Y-m-d H:i:s');
//            });

        }
    }


    public static function callback($client_id)
    {
        $resArr = array(
            'type' => 1,
            'code' => 200,
            'messageuuid' => $client_id,
            'msg' => '更新成功'
        );

        return Gateway::sendToAll(json_encode($resArr));
    }
}